#!/bin/bash
#=====================================================
# 功能：OpenGauss 数据库控制脚本（omm用户专用）
# 作者：洛洛  B站ID：2025251948
# 版本：1.2 
#=====================================================

DATA_DIR="/opt/software/openGauss/data/single_node"
SCRIPT_PATH="/usr/local/bin/db"
LOG_FILE="/opt/software/openGauss/luo-gauss-init"  # 新增：定义日志文件路径

# 颜色定义
RED='\033[1;31m'    # 高亮红色
GREEN='\033[1;32m'  # 高亮绿色
YELLOW='\033[1;33m' # 高亮黄色
BLUE='\033[1;34m'   # 高亮蓝色
PURPLE='\033[1;35m' # 高亮紫色
CYAN='\033[1;36m'   # 高亮青色
WHITE='\033[1;37m'  # 高亮白色
END='\033[0m'       # 重置颜色
BOLD='\033[1m'      # 加粗（可保留，视需求使用）

# 检查用户身份
check_user() {
    if [ "$(whoami)" == "root" ]; then
        echo -e "${RED}错误：root用户不能执行此脚本！${END}"
        read -p "是否要删除此脚本文件？(输入qrsc确认删除，其他取消): " confirm
        if [ "$confirm" == "qrsc" ]; then
            echo -e "${RED}■ 正在删除openGauss安装目录...${END}"
            rm -rf /opt/software/openGauss
            echo -e "${GREEN}💡/opt/software/openGauss 目录已删除...${END}"
            echo -e "${RED}■ 正在删除脚本文件...${END}"
            rm -f $SCRIPT_PATH
            echo -e "${GREEN}✔ 脚本文件已删除${END}"
        else
            echo -e "${GREEN}已取消删除操作${END}"
        fi
        exit 1
    elif [ "$(whoami)" != "omm" ]; then
        echo -e "${RED}错误：请使用 omm 用户执行此脚本！${END}"
        exit 1
    fi
}

# 版本信息
show_header() {
    echo "=============================================="
    echo -e "${PURPLE}  OpenGauss 数据库控制脚本（omm用户专用）"
    echo -e "  作者：${CYAN}洛洛${PURPLE}  B站ID：${CYAN}2025251948${PURPLE}"
    echo -e "  版本：${CYAN}1.2${PURPLE}"
    echo -e "${WHITE}  存放路径：$SCRIPT_PATH"
    echo "=============================================="
}

# 主菜单界面
show_menu() {
    clear
    show_header
    echo -e "${BOLD}请选择要执行的操作：${END}"
    echo -e "${GREEN}1. 启动数据库${END}"
    echo -e "${RED}2. 停止数据库${END}"
    echo -e "${GREEN}3. 重启数据库${END}"
    echo -e "${CYAN}4. 查看状态${END}"
    echo -e "${YELLOW}5. 卸载数据库${END}"
    echo -e "${BLUE}6. 查看安装日志${END}"  # 新增：查看安装日志选项
    echo -e "${WHITE}q. 退出脚本${END}"
    echo "----------------------------------------------"
}

# 状态检查函数
check_status() {
    local status_output=$(gs_ctl status -D $DATA_DIR 2>&1)
    echo -e "${WHITE}----------------------------------------------${END}"

    if echo "$status_output" | grep -q "server is running"; then
        echo -e "${CYAN}数据库状态：${GREEN}[ 运行中 ] running ${END}"
        echo "$status_output" | grep --color=always "server is running"
    else
        echo -e "${CYAN}数据库状态：${RED}[ 已停止 ] stopped ${END}"
        echo "$status_output" | grep --color=always "server is"
    fi
    echo "$status_output" | while read -r line; do
        echo -e "${WHITE}$line${END}"
    done
}

# 卸载函数
uninstall_opengauss() {
    check_user
    
    echo -e "${YELLOW}⚠ 警告：即将卸载OpenGauss数据库！${END}"
    echo -e "${RED}这将删除所有数据和配置文件，操作不可逆！${END}"
    
    read -p "确定要卸载吗？(y/n): " confirm
    if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
        echo -e "${GREEN}已取消卸载操作${END}"
        exit 0
    fi
    
    # 停止数据库
    echo -e "${RED}■ 正在停止数据库...${END}"
    gs_ctl stop -D $DATA_DIR -Z single_node >/dev/null 2>&1
    
    # 删除安装目录
    echo -e "${RED}■ 正在删除安装目录...${END}"
    rm -rf /opt/software/openGauss
    echo -e "${GREEN}💡/opt/software/openGauss 下的所有文件已删除...${END}"

    # 清理环境变量
    echo -e "${RED}■ 正在清理环境变量...${END}"
    
    # 清理 .bashrc
    sed -i '/export GAUSSHOME=\/opt\/software\/openGauss/d' /home/omm/.bashrc
    sed -i '/export PATH=$GAUSSHOME\/bin:$PATH/d' /home/omm/.bashrc
    sed -i '/export LD_LIBRARY_PATH=$GAUSSHOME\/lib:$LD_LIBRARY_PATH/d' /home/omm/.bashrc
    sed -i '/export GS_CLUSTER_NAME=dbCluster/d' /home/omm/.bashrc
    sed -i '/ulimit -n 1000000/d' /home/omm/.bashrc
    
    # 新增：清理 .bash_profile 中的启动命令
    echo -e "${RED}■ 正在清理启动命令...${END}"
    sed -i '/gs_ctl start -D \/opt\/software\/openGauss\/data\/single_node -Z single_node/d' /home/omm/.bash_profile 2>/dev/null

    # 重新加载bash配置
    source /home/omm/.bashrc
    
    echo -e "${GREEN}✔ OpenGauss数据库已成功卸载${END}"
}

# 新增：查看安装日志函数
view_log() {
    if [ -f "$LOG_FILE" ]; then
        echo -e "${BLUE}📄 [洛洛温馨提示：不必要请手动删除该日志] 日志内容：${END}"
        echo -e "${WHITE}----------------------------------------------${END}"
        cat "$LOG_FILE"
        echo -e "${WHITE}----------------------------------------------${END}"
    else
        echo -e "${RED}⚠ 安装日志文件不存在！${END}"
    fi
}

# 修改执行逻辑
if [ $# -eq 0 ]; then
    check_user
    # 无参数时显示菜单后直接退出
    show_menu
    read -p "请输入操作编号（1/2/3/4/5/6/q）: " choice
    case $choice in
        1) action="start" ;;
        2) action="stop" ;;
        3) action="restart" ;;
        4) action="status" ;;
        5) action="uninstall" ;;
        6) action="info" ;;  # 新增：查看安装日志
        q|Q) exit 0 ;;
        *) echo -e "${RED}无效输入${END}"; exit 1 ;;
    esac
    
    # 执行对应操作
    case $action in
        start|stop|restart|status|uninstall|info)
            $0 $action
            exit $?
            ;;
    esac
else
    # 带参数直接执行对应操作
    case $1 in
        start)
            check_user
            echo -e "${GREEN}▶ 正在启动数据库...${END}"
            gs_ctl start -D $DATA_DIR -Z single_node
            ;;
        stop)  
            check_user
            echo -e "${RED}■ 正在停止数据库...${END}"
            gs_ctl stop -D $DATA_DIR -Z single_node
            ;;
        restart)
            check_user
            echo -e "${YELLOW}↻ 正在重启数据库...${END}"
            gs_ctl restart -D $DATA_DIR -Z single_node
            ;;
        status)
            check_user
            check_status
            ;;
        uninstall)
            uninstall_opengauss
            ;;
        info)  # 新增：查看安装日志
            check_user
            view_log
            ;;
        *)
            echo -e "${RED}⚠ 无效输入，支持命令：start, stop, restart, status, uninstall, info${END}"
            exit 1
            ;;
    esac
fi